﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SanFranciscoModel.Intermedias;

namespace SanFranciscoModel.Nota
{
    public class TipoNotaManager
    {
        //Metodo para devolver una lista de TipoAlumno cargada
        public List<TipoNota> getTipoNotaAll()
        {
            List<TipoNota> TipoNotaList = new List<TipoNota>();
            TipoNotaDataContext db = new TipoNotaDataContext();

            var objeto = from tipoalumno in db.TipoNotas
                         select tipoalumno;
            foreach (var tipo in objeto)
            {
                TipoNotaList.Add(tipo);
            }
            return TipoNotaList;
        }

        public TipoNota getTipoNotaById(int id)
        {
            TipoNota TipoNota = new TipoNota();
            TipoNotaDataContext db = new TipoNotaDataContext();

            var objeto = from x in db.TipoNotas
                         where x.idTipoNota == id
                         select x;
            foreach (var tipo in objeto)
            {
                TipoNota = tipo;
            }
            return TipoNota;
        }


        //devuelve la nota posible para la carga
        public TipoNota getTipoNotaPosibleMateria(int dni, int idMateria, int idCurso)
        {
            List<AlumnoXMateriaXNota> AlumnoXMateriaXNotaList = new List<AlumnoXMateriaXNota>();
            AlumnoXMateriaXNota AlumnoXMateriaXNotatMax = new AlumnoXMateriaXNota();

            TipoNota TipoNota = new TipoNota();
            AlumnoXMateriaXNotaDataContext db = new AlumnoXMateriaXNotaDataContext();

            var objeto = from x in db.AlumnoXMateriaXNota
                         where x.DNIAlumno == dni
                         && x.idMateria == idMateria
                         && x.IdCurso == idCurso
                         && x.NotaMateria!=null
                         select x;
            foreach (var tipo in objeto)
            {
                AlumnoXMateriaXNotaList.Add(tipo);
            }

            bool flag = true;

            foreach (AlumnoXMateriaXNota axmxn in AlumnoXMateriaXNotaList)
            {
                if (flag == true)
                {
                    AlumnoXMateriaXNotatMax = axmxn;
                    flag = false;
                }
                else
                {
                    if (axmxn.TipoNota > AlumnoXMateriaXNotatMax.TipoNota)
                    {
                        AlumnoXMateriaXNotatMax = axmxn;
                    }
                }
            }

            //ya tengo el mayor
            if (AlumnoXMateriaXNotaList.Count == 0)
                return getTipoNotaById(1);
            if (AlumnoXMateriaXNotaList.Count == 1)
                return getTipoNotaById(2);
            if (AlumnoXMateriaXNotaList.Count == 2)
                return getTipoNotaById(3);
            if (AlumnoXMateriaXNotaList.Count == 3)
                return getTipoNotaById(4);
            if (AlumnoXMateriaXNotaList.Count == 4 && AlumnoXMateriaXNotaList[3].NotaMateria < 7)
                return getTipoNotaById(5);
            if (AlumnoXMateriaXNotaList.Count == 5 && AlumnoXMateriaXNotaList[4].NotaMateria < 4)
                return getTipoNotaById(6);

            if (AlumnoXMateriaXNotaList.Count == 6 )
                {
                    TipoNota.idTipoNota = 7;
                    TipoNota.TipoNota1 = "Todos los periodos cargados";
                    return TipoNota;
                }
            TipoNota.idTipoNota = 7;
            TipoNota.TipoNota1 = "Todos los periodos cargados";
            return TipoNota;
        }


        //devuelve la nota posible para la carga
        public TipoNota getTipoNotaPosibleConducta(int dni, int idMateria, int idCurso)
        {
            List<AlumnoXMateriaXNota> AlumnoXMateriaXNotaList = new List<AlumnoXMateriaXNota>();
            AlumnoXMateriaXNota AlumnoXMateriaXNotatMax = new AlumnoXMateriaXNota();

            TipoNota TipoNota = new TipoNota();
            AlumnoXMateriaXNotaDataContext db = new AlumnoXMateriaXNotaDataContext();

            var objeto = from x in db.AlumnoXMateriaXNota
                         where x.DNIAlumno == dni
                         && x.idMateria == idMateria
                         && x.IdCurso == idCurso
                         && x.NotaConducta != null
                         select x;
            foreach (var tipo in objeto)
            {
                AlumnoXMateriaXNotaList.Add(tipo);
            }

            bool flag = true;

            foreach (AlumnoXMateriaXNota axmxn in AlumnoXMateriaXNotaList)
            {
                if (flag == true)
                {
                    AlumnoXMateriaXNotatMax = axmxn;
                    flag = false;
                }
                else
                {
                    if (axmxn.TipoNota > AlumnoXMateriaXNotatMax.TipoNota)
                    {
                        AlumnoXMateriaXNotatMax = axmxn;
                    }
                }
            }

            //ya tengo el mayor
            if (AlumnoXMateriaXNotaList.Count == 0)
                return getTipoNotaById(1);
            if (AlumnoXMateriaXNotaList.Count == 1)
                return getTipoNotaById(2);
            if (AlumnoXMateriaXNotaList.Count == 2)
                return getTipoNotaById(3);
            if (AlumnoXMateriaXNotaList.Count == 3)
                return getTipoNotaById(4);
            if (AlumnoXMateriaXNotaList.Count == 4)
            {
                TipoNota.idTipoNota = 5;
                TipoNota.TipoNota1 = "Todos los periodos cargados";
                return TipoNota;
            }
            TipoNota.idTipoNota = 5;
            TipoNota.TipoNota1 = "Todos los periodos cargados";
            return TipoNota;
        }
    }
}
